#include <stdio.h>
#include "single_linked_list.cpp"

// 带头节点的链表L中, 删除所有值为x的节点
// 在原链表操作
void DeleteNode(LinkedList &L, int x) {
    LNode *ptr = L;
    while (ptr->next != NULL)
    {
        if (ptr->next->data == x) {
            LNode *q = ptr->next;
            ptr->next = ptr->next->next;
            free(q);
        }
        else 
            ptr = ptr->next;  
    }
}

// 生成新链表
void DeleteNode2(LinkedList &L, int x) {
    LNode *ptr = L->next;
    LNode *q = L;
    while (ptr != NULL)
    {
        if (ptr->data != x) {
            q->next = ptr;
            q = q->next;
            ptr = ptr->next;
        } else {
            LNode *t = ptr;
            ptr = ptr->next;
            free(t);
        }
    }
}

int main() {
    LinkedList L;
    InitList(L);

    // 插入
    ListAppend(L, 2);
    ListAppend(L, 3);
    ListAppend(L, 3);
    ListAppend(L, 7);
    ListAppend(L, 3);
    ListAppend(L, 6);
    PrintList(L);

    DeleteNode2(L,3);
    PrintList(L);

    DeleteNode(L,3);
    PrintList(L);
    return 0;
}